#ifndef __APP_BILL_H_
#define __APP_BILL_H_

#include "Includes.h"
#include "SVS_Time.h"
#include "DEV_HT7017.h"
#include "DEV_Station.h"
#include "DEV_Timer.h"

//////////////////////////计费////////////////
#define BFNO_LENGTH    16    /*交易流水号长度*/
#define BILL_NUM_DEF 0x0100
#define TIME_PERIODS_NUM    48
#define BILL_IDX(H,M)    ((H*60+M)/30)

typedef enum
{
    BILL_PAY_TYPE_SHARP=0,//尖
    BILL_PAY_TYPE_PEEK,//峰
    BILL_PAY_TYPE_SHOULDER,//平
    BILL_PAY_TYPE_OFFPEEK,//谷
    BILL_PAY_TYPE__MAX
}BILL_PAY_TYPE_EN;//支付类型

typedef enum
{
    BILL_STATE_STOP=0,
    BILL_STATE_START,
    BILL_STATE_MAX
}BILL_STATE_EN;

typedef struct
{
    U16 billModeNo;//计费模型编号
    U32 SER;//尖费电费费率
    U32 SSR;//尖服务费费率
    U32 PER;//峰电费费率
    U32 PSR;//峰服务费费率
    U32 FER;//平电费费率
    U32 FSR;//平服务费费率
    U32 VER;//谷电费费率
    U32 VSR;//谷服务费费率
    U8 LCR;//计损比例
    U8 timerate_map[TIME_PERIODS_NUM];//时段费率号
}BILL_MODE_ST;

typedef struct
{
    ST_TIME time_start;//开始计费时间
    ST_TIME time_end;//结束计费时间
    NORMAL_ELECTRIC_INFO_ST elec_start_info;//开始计费电量
    NORMAL_ELECTRIC_INFO_ST elec_end_info;//结束计费电量
    U32 idx_start;//开始计费QOE开始索引
    U32 idx_stop;//开始计费QOE结束索引
    U32 QOE_map[TIME_PERIODS_NUM];//时段用量量表
    U32 SQOE;//尖用电量
    U32 PQOE;//峰用电量
    U32 FQOE;//平用电量
    U32 VQOE;//谷用电量
    U32 TtlQOE;//总用电量
}BILL_STATS_ST;//计费统计

extern U8 BFNo[BFNO_LENGTH];//交易流水号
extern BILL_MODE_ST bill_model;
extern U32 ChgedMoney;
extern U16 g_usAcumChgTime;
extern U16 g_usRemainChgTime;

//pParameter表示igun_num:1,2.内部转换0,1
int BillTimerCallback(void *pParameter);
//开始计费,igun_num:1,2.内部转换0,1
void BillStart(U8 igun_num);
//停止计费,igun_num:1,2.内部转换0,1
void BillStop(U8 igun_num);
void BillInit(void);
void BillLoop(void);

#endif
